# 创建时间：2025/4/29 星期二 20:32
# 创建人：李德才
list = [10, 50, 20, 80, 30, 100, 40, 60, 70, 90]

""" 在原列表上进行排序 """
list.sort()
print("升序", id(list), list)

list.sort(reverse=True)
print("降序", id(list), list)

list.sort(reverse=False)
print("升序", id(list), list)

"""产生新的列表"""

"""
## 问题：35行和33行输出的id 是一样的吗，sorted 不应该产生一个新的对象吗？
============================================================================
## 回答：第一次调用 sorted(list) 时，生成了一个新的升序列表，将其赋值给 new_list 变量，此时 new_list 引用这个新列表。
第二次调用 sorted(list, reverse=True) 时，生成了一个新的降序列表，把这个新列表赋值给 new_list 变量。
这时候，new_list 原来引用的升序列表对象就没有变量引用它了（会被 Python 的垃圾回收机制处理），new_list 开始引用新的降序列表。
第三次调用 sorted(list, reverse=False) 时，又生成了一个新的升序列表，再次把这个新列表赋值给 new_list 变量。
同样，new_list 之前引用的降序列表对象不再被引用，new_list 开始引用最新生成的升序列表。
-------------------------------------------------------------
 关于对象 ID 相同的问题
虽然每次调用 sorted() 函数都生成了新的列表对象，
但由于使用同一个变量 new_list 来引用这些新对象，在输出对象 ID 时，看到的是当前 new_list 引用的对象 ID。
*** Python 的内存管理机制会复用之前释放的内存地址，所以可能会出现不同时间创建的对象 ID 相同的情况，但这并不意味着它们是同一个对象。***
"""
new_list = sorted(list)
print("升序", id(new_list), new_list)
new_list = sorted(list, reverse=True)
print("降序", id(new_list), new_list)
new_list = sorted(list, reverse=False)
print("升序", id(new_list), new_list)
